﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using GIC.BO.Access;
using GIC.DAO.Model;

namespace GIC.UI
{
    public partial class Configuracoes : Form
    {
        #region DeclarationVariable
        private TelaPrincipal form1;
        private Parametros parametrosEntity = new Parametros();
        private GICBo bo = new GICBo();

        
        private String etiquetaRolo = "R";
        private String etiquetaSanfonada = "S";
        private SocketThread socketThread;

        #endregion

        #region Main

        public Configuracoes()
        {
            InitializeComponent();

            this.TopMost = true;
        }

        public Configuracoes(TelaPrincipal telaPrincipal, Parametros parametrosEntity, SocketThread socketThread)
        {
            InitializeComponent();
            this.form1 = telaPrincipal;
            this.parametrosEntity = parametrosEntity;
            this.socketThread = socketThread;

            this.TopMost = true;
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            foreach (string impressora in PrinterSettings.InstalledPrinters)
            {
                cboImpressoras.Items.Add(impressora);
            }

            FontFamily[] listaFontes = FontFamily.Families;
            foreach (FontFamily fonte in listaFontes)
            {
                cboFontes.Items.Add(fonte.Name);
            }
            PreencherComponentes();
            
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.form1.Enabled = true;
            this.form1.setParametrosEntity(this.parametrosEntity);
            this.form1.Show();
        }

        #endregion

        #region Method

        public void PreencherComponentes() {

            this.parametrosEntity = bo.obterParametro();

            if (this.parametrosEntity != null)
            {
                try
                {

                    txtLargura.Text = Convert.ToString(this.parametrosEntity.larguraCM);
                    txtAltura.Text = Convert.ToString(this.parametrosEntity.alturaCM);
                    txtLoteImpressao.Text = Convert.ToString(this.parametrosEntity.loteImpressao);
                    cboFontes.SelectedItem = this.parametrosEntity.nomeFonte;
                    cboImpressoras.SelectedItem = this.parametrosEntity.nomeImpressora;
                    txtQuantCopias.Text = Convert.ToString(this.parametrosEntity.qtdCopias);
                    txtEspacamento.Text = Convert.ToString(this.parametrosEntity.espacamentoCM);
                    radioEtiquetaSanfonada.Checked = this.parametrosEntity.tipoEtiqueta.Equals(etiquetaSanfonada);
                    radioEtiquetaRolo.Checked = this.parametrosEntity.tipoEtiqueta.Equals(etiquetaRolo);
                }catch{}
            }
        }

        public Parametros PreencherEntidade() {

            if(this.parametrosEntity == null)
                this.parametrosEntity = new Parametros();
            try
            {
                this.parametrosEntity.larguraCM = Convert.ToDecimal(txtLargura.Text);
                this.parametrosEntity.alturaCM = Convert.ToDecimal(txtAltura.Text);
                this.parametrosEntity.loteImpressao = Convert.ToInt32(txtLoteImpressao.Text);
                this.parametrosEntity.nomeFonte = cboFontes.SelectedItem.ToString();
                this.parametrosEntity.nomeImpressora = cboImpressoras.SelectedItem.ToString();
                this.parametrosEntity.qtdCopias = Convert.ToInt32(txtQuantCopias.Text);
                this.parametrosEntity.espacamentoCM = Convert.ToDecimal(txtEspacamento.Text);
                this.parametrosEntity.tipoEtiqueta = radioEtiquetaRolo.Checked ? etiquetaRolo : radioEtiquetaSanfonada.Checked ? etiquetaSanfonada : null;
            }
            catch{
                    throw new Exception();
            }

            return this.parametrosEntity;
        }

        public Boolean ValidandoCampos() { 
            if(Convert.ToDecimal(txtAltura.Text) <= 0){
                MessageBox.Show("Altura deve ser maior que zero!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAltura.Focus();
                return true;
            }
            if(Convert.ToDecimal(txtEspacamento.Text) <= 0){
                MessageBox.Show("Espaçamento deve ser maior que zero!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtEspacamento.Focus();
                return true;
            }
            if (Convert.ToDecimal(txtLargura.Text) <= 0) {
                MessageBox.Show("Largura deve ser maior que zero!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtLargura.Focus();
                return true;
            }
            if(Convert.ToInt64(txtQuantCopias.Text) <= 0){
                MessageBox.Show("Quantidade de Copias deve ser maior que zero!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtQuantCopias.Focus();
                return true;
            }
            if (Convert.ToInt64(txtLoteImpressao.Text) <= 0) {
                MessageBox.Show("Lote de Impressão deve ser maior que zero!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtLoteImpressao.Focus();
                return true;
            }
            if(cboFontes.SelectedItem == null){
                MessageBox.Show("Por favor, escolha uma fonte para impressão!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                cboFontes.Focus();
                return true;
            }
            if(cboImpressoras.SelectedItem == null){
                MessageBox.Show("Por favor, escolha uma impressora!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                cboImpressoras.Focus();
                return true;
            }
            if (!radioEtiquetaRolo.Checked && !radioEtiquetaSanfonada.Checked) {
                MessageBox.Show("Por favor, escolha um tipo de etiqueta!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return true;
            }

            return false;
        }

        public void SalvarParametros() {
            if(ValidandoCampos()){
                return;
            }
            try
            {
                this.bo.salvar(PreencherEntidade());
                MessageBox.Show("Informações gravadas com sucesso!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Information);

                this.form1.Enabled = true;
                this.form1.setParametrosEntity(this.parametrosEntity);
                this.form1.Show();
                this.Close();
            }
            catch {
                MessageBox.Show("Erro ao salvar, Por favor verifique!", "Configurações", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            
        }

        private void somenteNumeros(KeyPressEventArgs e, TextBox Texto, Boolean isFloat)
        {
            if (e.KeyChar < 48 || e.KeyChar > 58)
            {
                if (e.KeyChar == 8)
                {
                    e.KeyChar = (char)8;
                    return;
                }
                if (isFloat)
                {
                    if (e.KeyChar == 44)
                    {
                        if (Texto.TextLength == 0)
                        {
                            e.KeyChar = (char)0;
                            return;
                        }
                        if (Texto.TextLength > 0)
                        {
                            if (Texto.Text.Contains(e.KeyChar.ToString()))
                            {
                                e.KeyChar = (char)0;
                                return;
                            }
                        }
                    }
                    else
                    {
                        e.KeyChar = (char)0;
                        return;
                    }
                }
                else 
                {
                    e.KeyChar = (char)0;
                    return;
                }
            }
        }

        #endregion

        #region ActionComponents

            private void button1_Click(object sender, EventArgs e)
            {
                this.form1.Enabled = true;
                this.form1.setParametrosEntity(this.parametrosEntity);
                this.form1.carregarGrid();
                this.form1.Show();
                this.Close();
            }

            private void button3_Click(object sender, EventArgs e)
            {
                SalvarChassi form3 = new SalvarChassi(this);
                this.Enabled = false;
                form3.Show();
            }

            private void button2_Click(object sender, EventArgs e)
            { 
                SalvarParametros();
            }

            public void txtAltura_KeyPress(object sender, KeyPressEventArgs e) { somenteNumeros(e, txtAltura, true); }

            public void txtEspacamento_KeyPress(object sender, KeyPressEventArgs e) { somenteNumeros(e, txtEspacamento, true); }

            public void txtLargura_KeyPress(object sender, KeyPressEventArgs e) { somenteNumeros(e, txtLargura, true); }

            public void txtLoteImpresso_KeyPress(object sender, KeyPressEventArgs e) { somenteNumeros(e, txtLoteImpressao, false); }

            public void txtQuantCopias_KeyPress(object sender, KeyPressEventArgs e) { somenteNumeros(e, txtQuantCopias, false); }

        #endregion

            private void btnSocket_Click(object sender, EventArgs e)
            {
                SocketServer socketServer = new SocketServer(this, this.socketThread);
                socketServer.Show();
                this.Enabled = false;
            }

            private void button1_Click_1(object sender, EventArgs e)
            {
                ReEnvio form = new ReEnvio(this);
                form.Show();
                this.Enabled = false;
            }

            private void btnExcluirDados_Click(object sender, EventArgs e)
            {
                DialogResult result;
                result = MessageBox.Show("Você tem certeza que deseja eliminar todos os registros?", "Excluir Registros",
                    MessageBoxButtons.YesNo);

                if (result == DialogResult.Yes)
                {
                    this.bo.deletarTodosChassis();
                    MessageBox.Show("Todos os registros foram apagados",
                                                   "Excluir Registros",
                                                   MessageBoxButtons.OK,
                                                   MessageBoxIcon.Information,
                                                   MessageBoxDefaultButton.Button1);

                    TelaPrincipal tela = (TelaPrincipal)this.Owner;
                    tela.carregarGrid();
                }
                
            }

            private void btnEtqChassi_Click(object sender, EventArgs e)
            {
                this.Enabled = false;
                EtiquetaChassi form = new EtiquetaChassi(this);
                form.Show();



            }
            
    }
}
